1.获取上传的文件
# app.py
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file') # 获取上传文件
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
2.获取上传文件的文件名+后缀
- .filename
# app.py
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
file_name = file_obj.filename # 获取文件名 + 后缀
# 等价于
file_name = request.files.get('img_file').filename # 获取文件名 + 后缀
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
3.获取上传文件的大小
# app.py
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
bytes_file_content = file_obj.read() # 读取上传文件的bytes类型的内容 -> b'\xff\xd8\xff\xe0\x00\x……
byte_size = len(bytes_file_content) # 7634760 byte
kb_size = byte_size / 1024 # 7455.8 kb
mb_size = byte_size / 1024 / 1024 # 7.28 mb
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
4.限制上传文件的大小
- 如果上传的文件超出所限制的文件大小,那么就会返回一个 413 状态码
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
5. 获取文件流
- .stream -> stream 就是“流”的意思
- 文件流有点类似于文件句柄,可以循环着保存数据
# app.py
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
file_stream = file_obj.stream # 获取文件流
for line in file_stream:
print(line) # b'\xd8\xa9\n……'
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
6.保存上传文件
- 语法: .save('/保存的路径/保存的文件名.后缀名')
- 注意: .save() 方法所接收的路径格式是: 所要保存到那个路径 + 文件名.后缀名 -> 文件是什么那么保存的时候文件名就是什么
- 写法一
# app.py
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
file_name = file_obj.filename
file_obj.save('files/' + file_name) # 保存文件 -> 注意: 如果是当前项目的文件夹,那么路径开头不能加 /
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
- 写法二 -> 推荐使用
# app.py
import os
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
file_name = file_obj.filename
path = os.path.join('files', file_name) # 拼接保存文件的路径 -> 注意: 如果是当前项目的文件夹,那么路径开头不能加 /
file_obj.save(path) # 保存文件
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()
7. 自定义保存上传文件
- 不使用 .save() 保存文件,获取文件流自己保存上传文件
# app.py
import os
from flask import Flask, render_template, request
app = Flask(__name__)
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024 # 限制只允许上传 16MB 大小以内的文件, 如果超过此设置的大小就会返回一个 413 状态码
@app.route('/upload_files', methods=['GET', 'POST'])
def upload_files():
if request.method == 'POST':
file_obj = request.files.get('img_file')
file_stream = file_obj.stream # 获取文件流
path = os.path.join('files', file_obj.filename) # 拼接保存文件的路径 -> 注意: 如果是当前项目的文件夹,那么路径开头不能加 /
with open(path, mode='wb') as f:
for line in file_stream:
f.write(line)
return render_template('upload_files.html')
if __name__ == '__main__':
app.run()